今天我們來加入一些燃料,並且將之前加入的新物品整合到一個ItemGroup中
Minecraft中有許多可以拿來當作熔煉燃料的東西,我們今天來加入松脂。
首先我們像普通物品一樣創建他。
public static final Item Colophony = registerItem("colophony", new Item(new FabricItemSettings()));
就像一般的物品一樣,我們還要加入材質、model跟語言
然後我們在Mod主類(以你的Mod名稱命名的class)的onInitialize中這樣寫
FuelRegistry.INSTANCE.add(Moditems.Colophony, 300);
我們將Colophony註冊為燃料,並給它300tick,也就是15秒的燃燒時間。
當我們開啟創造模式的時候,物品都會以種類區分,例如工具類、食物類等等,我們的模組物品也可以自成一類,只要透過註冊ItemGroup就可以。我們在Item資料夾中建立一個ModItemGroups,裡面這樣寫
public class ModItemGroups {
public static final ItemGroup TheClassicofMountainandOceansItemGroup = Registry.register(Registries.ITEM_GROUP, new Identifier(net.como.TheClassicofMountainsandOceans.MOD_ID,"comoitemgroup")
, FabricItemGroup.builder().displayName(Text.translatable("itemgroup.comoitemgroup")).icon(() -> new ItemStack(Moditems.Siderite))
.entries(((displayContext, entries) -> {
entries.add(Moditems.Siderite);
entries.add(ModBlocks.SIDERITE_BLOCK);
entries.add(Moditems.Meat_of_the_nine_head_phoenixes);
entries.add(Moditems.Colophony);
entries.add(Moditems.StaffofNature);
entries.add(ModBlocks.KUNLUN_STONE);
entries.add(ModBlocks.SIDERITE_DOOR);
entries.add(ModBlocks.SIDERITE_BUTTON);
entries.add(ModBlocks.SIDERITE_FENCE);
entries.add(ModBlocks.SIDERITE_FENCE_GATE);
entries.add(ModBlocks.SIDERITE_PRESSURE_PLATE);
entries.add(ModBlocks.SIDERITE_SLAB);
entries.add(ModBlocks.SIDERITE_STAIRS);
entries.add(ModBlocks.SIDERITE_TRAPDOOR);
entries.add(ModBlocks.SIDERITE_WALL);
entries.add(Moditems.SIDERITE_AXE);
entries.add(Moditems.SIDERITE_HOE);
entries.add(Moditems.SIDERITE_SHOVEL);
entries.add(Moditems.SIDERITE_PICKAXE);
entries.add(Moditems.SIDERITE_SWORD);
})).build());
}
我們註冊一個新的物品組,所以註冊中我們寫Registries.ITEM_GROUP,new Identifier中我們給我們的模組ID跟物品組的名稱,後面我們接上FabricItemGroup.builder()來創建這個物品組,.displayname可以設定我們的顯示名稱,我們使用Text.translatable("itemgroup.comoitemgroup")來將這個名稱綁訂到Lang的JSON檔中,這樣我們就可以設定不同語言有不同名稱,.icon則可以設定做為標示顯示的物品,我這裡選擇我們殞鐵錠,最後我們使用Lambda表達示來指定誰要加入這個物品組,我們用entries.add來加入物品,最後再加一個.build來建立的個物品組。
public static void registerItemGroups(){
TheClassicofMountainsandOceans.LOGGER.info("Registering Item Groups for " + net.como.TheClassicofMountainsandOceans.MOD_ID);
}
後面我們再加一個方法,這個方法看似只是將一些文字記錄到LOGGER中,但是我們需要這個方法在Mod主類中呼叫
@Override
public void onInitialize() {
ModItemGroups.registerItemGroups();
Moditems.registerModItems();
ModBlocks.registerModBlocks();
OpenCustomGuiPacket.registerReceiver();
LOGGER.info("Hello Fabric world!");
FuelRegistry.INSTANCE.add(Moditems.Colophony, 300);
ServerTickEvents.END_SERVER_TICK.register(this::onServerTickEnd);
}
我們在OnInitialize中使用這段日誌程式,在onInitialize中呼叫,這個方法是我們模組所有功能初始化的地方,我們將ModItemGroups加入到這裡來使模組在初始化的時候加入ItemGroups。